use anyhow::{anyhow, Result};
use url::Url;

// 自定义相对路径计算函数
pub fn calculate_relative_path(full_uri: &Url, base_uri: &Url) -> String {
    // 检查协议、主机和端口是否相同
    if full_uri.scheme() != base_uri.scheme()
        || full_uri.host_str() != base_uri.host_str()
        || full_uri.port() != base_uri.port()
    {
        // 如果不同，返回完整路径
        return full_uri.path().to_string();
    }

    let base_path = base_uri.path();
    let full_path = full_uri.path();

    // 如果基础路径是完整路径的前缀
    if full_path.starts_with(base_path) {
        let relative = &full_path[base_path.len()..];
        // 移除开头的斜杠（如果有）
        if relative.starts_with('/') {
            relative[1..].to_string()
        } else {
            relative.to_string()
        }
    } else {
        // 如果不匹配，返回完整路径
        full_path.to_string()
    }
}
pub fn get_md5_string_result(org_str: &str, len: usize) -> Result<String> {
    if len == 0 {
        return Err(anyhow!("长度不能为0"));
    }

    let len = len.clamp(1, 32);

    // 直接使用 md5::compute 计算哈希
    let hash = md5::compute(org_str);

    // 将哈希转换为十六进制字符串（小写）
    let hex_string = hash
        .iter()
        .map(|byte| format!("{:02x}", byte))
        .collect::<String>();

    Ok(hex_string[..len].to_string())
}